package com.yotouch.app.stake.hsf;

import com.yotouch.app.stake.model.response.*;

public interface StakeService {

    /**
     * 统计国网桩数量
     *
     * @return
     */
    ResponseInt sgccTotalCount() ;

    /**
     * 获取国网桩
     *
     * @return
     */
    ResponseStakeList sgccList(int offset, int limit) ;

    ResponseInt totalCount();
    
    ResponseStakeList list(int offset, int limit);
    
    ResponseInt countByStation(String stationUuid);
    
    ResponseStakeList listByStation(String stationUuid, int offset, int count);

    /**
     * 根据充电桩 uuid 获取充电桩
     * @param uuid
     * @return
     */
    ResponseStake get(String uuid);

    /**
     *  申请桩注册码
     *
     * @param count - 注册码数量
     * @param type - 充电桩类型（直流，交流）
     * @param prOrgCode - 产权单位编码
     * @param chargerFeeModel - 电费模型（计费模型 id）
     * @param serviceFeeModel - 服务费模型
     * @param note - 申请备注
     * @param orderId - 订单 id
     * @param vendorName - 生产厂家
     * @param equipModel - 设备型号
     * @param userName - 用户名
     * @param userToken - 用户 token
     * @return
     */
    ResponseBase genRegisterCode(
            int count,
            int type,
            String prOrgCode,
            String chargerFeeModel,
            String serviceFeeModel,
            String note,
            String orderId,
            String vendorName,
            String equipModel,
            String userName,
            String userToken
    );

    /**
     * 桩接入流程入口
     * 根据桩注册码获取桩信息
     *
     * @param registerCode - 注册码
     * @param stakeNo - 桩编号，新桩注册全为 0， 老桩重新注册为桩编号
     */
    ResponseStake getStakeByRegisterCode(String registerCode, String stakeNo);

    /**
     * 
     * @param registerCode 注册码
     * @param finterprint 设备指纹
     * @return 返回桩信息，主要查看  stakeNo 桩编码和 authCode 授权码
     */
    ResponseStake genStakeNoAndAuthCode(String registerCode, String finterprint);

    /**
     * 检查是否是正常的充电桩
     * 
     * @param registerCode 注册码
     * @param authCode 授权码
     * @param fingerpint 设备指纹
     * @return
     */
    ResponseBoolean checkStake(String registerCode, String authCode, String fingerpint);

    /**
     * 根据UUID获取注册码申请
     *      当申请通过时，会带有注册码数据
     *
     * @param uuid
     * @return
     */
    ResponseRegistrationApply getRegistration(String uuid) ;


    /**
     * 根据桩编号获取桩信息
     */
    ResponseStake getStakeByNo(String stakeNo) ;


    /**
     * 桩变动接收确认
     *
     * @param stakeNo
     * @param confirm
     * @return
     */
    ResponseBase confirmStakeChange(String stakeNo, int confirm) ;

    /**
     * 获取桩(编号、授权码)变动记录
     *
     * @param changeLogUuid
     * @return
     */
    ResponseStakeChangeLog getChangeLog(String changeLogUuid) ;


    /**
     *  手动同步Redis数据
     */
    boolean initRedis();

    /**
     *  初始化桩信息到redis中
     * @return
     */
    boolean initStakeInRedis();

}
